#pragma once
#include "../SGD Wrappers/SGD_Geometry.h"
#include "../SGD Wrappers/SGD_Color.h"
#include "../SGD Wrappers/SGD_GraphicsManager.h"

class Emitter;

#define WIN32_LEAN_AND_MEAN
#include <Windows.h>
#include <cassert>

class Particles
{
private:
	// parameter data

public:
	// default ctor
	Particles() = default;
	// overloaded ctor
	Particles(Emitter* import);


	// pubilc variables
#pragma region
	// default dtor
	virtual ~Particles() = default;

	bool isActive = false; // is the particle Active?

	// FLOAT
	float currAge; // current particle age
	float maxAge; // max particle age

	float startRotation; // start rotation angle
	float currRotation; // current rotation angle
	float endRotation; // ending rotation angle

	float currA; // current Alpha color
	float currR; // current Red color
	float currG; // current Green color
	float currB; // current Blue color

	// VECTOR2
	SGD::Point position; // Position of the particle

	SGD::Vector startVelocity; // starting velocity
	SGD::Vector currVelocity; // current velocity
	SGD::Vector endVelocity; // ending velocity

	SGD::Size startScale; // starting scale
	SGD::Size currScale; // current scale
	SGD::Size endScale; // ending scale

	// COLOR
	SGD::Color startColor; // starting color
	SGD::Color currColor; // current color
	SGD::Color endColor; // ending color

	// emitter variable to access updated NUD info
	Emitter* emmit; // see overloaded ctor
#pragma endregion

	//// Accessors
	//float GetCurrAge() const { return currAge; }
	//float GetMaxAge() const { return MAX_AGE; }
	//bool GetisActive() const { return isActive; }
	//SGD::Point GetPosition() const { return position; }

	//// Mutators
	//void SetCurrAge(float age) { currAge = age; }
	//void SetMaxAge(float max) { MAX_AGE = max; }
	//void SetisActive(bool alive) { isActive = alive; }
	//void SetPosition(SGD::Point pos) { position = pos; }
	//void SetVelocity(SGD::Vector vel) { currVelocity = vel; }

	// Update the Particle
	void Update(float elapsedTime);
};

